﻿using CAD.BLL;
using CAD.DTO;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WFASmartketing.PRESENTACION_COMPRAS
{
    public partial class RegistroPagoCompra : Form
    {
        private FrmPrincipal principal;
        public RegistroPagoCompra(FrmPrincipal principal)
        {
            InitializeComponent();
            this.principal = principal;
            recargarGrid();
            rbbanco.Checked = true;
            cbxdestino.DropDownStyle = ComboBoxStyle.DropDownList;
            cbxnrocuenta.DropDownStyle = ComboBoxStyle.DropDownList;
            cbxvendedor.DropDownStyle = ComboBoxStyle.DropDownList;
            
        }

        private void RegistroPagoCompra_Load(object sender, EventArgs e)
        {
            // TODO: This line of code loads data into the 'vendedorDS.vendedor_selectAll' table. You can move, or remove it, as needed.
            this.vendedor_selectAllTableAdapter.Fill(this.vendedorDS.vendedor_selectAll);
          
        }

        private void textBox5_KeyPress(object sender, KeyPressEventArgs e)
        {
            UTIIIDADES.UTILIDADES.soloDecimanes(e, txtmonto);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.Hide();
        }
        private void limpiarPantalla()
        {
            txtnrotransaccioncompra.Text = "";
            txtnrorecibo.Text = "";
            txtmonto.Text = "0";
            txtgloza.Text = "";
        }
        private void button2_Click(object sender, EventArgs e)
        {
            limpiarPantalla();
        }

        private void rbbanco_CheckedChanged(object sender, EventArgs e)
        {
            cbxdestino.Enabled = true;
            cbxnrocuenta.Enabled = true;
            cargarBanco();
            try
            {
                int cuentabanco = (int)cbxdestino.SelectedValue;
                cargarCuentaBanco(cuentabanco);
            }
            catch (Exception)
            {
                 MessageBox.Show(this, "No Existen Algunos Datos", "ADVERTENCIA");
                          return;
            }
           
        }

        private void rbcaja_CheckedChanged(object sender, EventArgs e)
        {
            cbxdestino.Enabled = true;
            cbxnrocuenta.Enabled = false;
            cargarcaja();
        }
        private void cargarBanco()
        {
            List<banco> listacajas = bancoBLL.SelectAll();
            cbxdestino.DataSource = listacajas;
            cbxdestino.DisplayMember = "Nombre";
            cbxdestino.ValueMember = "Id";
        }
        private void cargarCuentaBanco(int idbanco)
        {
            List<cuentaBanco> listacajas = cuentabancoBLL.SelectByBanco(idbanco);
            cbxnrocuenta.DataSource = listacajas;
            cbxnrocuenta.DisplayMember = "Nrocuenta";
            cbxnrocuenta.ValueMember = "Id";
        }
        private void cargarcaja()
        {
            List<caja> listacajas = cajaBLL.SelectAll();
            cbxdestino.DataSource = listacajas;
            cbxdestino.DisplayMember = "Nombre";
            cbxdestino.ValueMember = "Id";
        }

        private void cbxdestino_TabIndexChanged(object sender, EventArgs e)
        {

        }

        private void cbxdestino_SelectionChangeCommitted(object sender, EventArgs e)
        {
            if (rbbanco.Checked)
            {
                int cuentabanco = (int)cbxdestino.SelectedValue;
                cargarCuentaBanco(cuentabanco);
            }
        }
        private void imprimirComprobante(int pkCompra)
        {
            MessageBoxButtons buttons = MessageBoxButtons.YesNo;
            DialogResult result;
            result = MessageBox.Show(this, "Desea Imprimir ver el comprobante", "REGISTRO DE DATOS", buttons);
            if (result == DialogResult.Yes)
            {
                REPORTES.ComprobantePagoCompraWF compro = new REPORTES.ComprobantePagoCompraWF(pkCompra);
                compro.MdiParent = principal;
                compro.Show();
                return;
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            if (txtnrotransaccioncompra.Text.Length != 0)
            {
                int idcompra = Convert.ToInt32(txtnrotransaccioncompra.Text);
                string tipopago = "CAJA";
                int iddestino = (int)cbxdestino.SelectedValue;

                double monto = 0;
                try
                {
                    monto = Convert.ToDouble(txtmonto.Text); 
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Debe ingresar un monto a pagar", "ERROR");
                    return;
                }
                if(monto<=0){
                    MessageBox.Show(this, "Monto a pagar debe ser mayor al 0", "ERROR");
                    return;
                }
                string gloza = txtgloza.Text;
                DateTime fecha = dtcfecha.Value;
                string nrorecibo = txtnrorecibo.Text;
                int idvendedor = (int)cbxvendedor.SelectedValue;
                double MontoPagadoActual = pagoscompraBLL.montoPagosPorCompra(idcompra);
                compra compra = compraBLL.SelectByID(idcompra);
                if ((MontoPagadoActual + monto) > compra.Total)
                {
                    MessageBox.Show(this, "El monto que ha ingresado en mayor a la deuda actual", "ADVERTENCIA");
                    txtmonto.Focus();
                    return;
                }
                if (rbbanco.Checked)
                {
                    try
                    {
                        tipopago = "BANCO";
                        iddestino = (int)cbxnrocuenta.SelectedValue;
                        int pk = pagoscompraBLL.insertar(idcompra, idvendedor, principal.ObtenerLogueado().Id, tipopago, iddestino, nrorecibo, monto, fecha, DateTime.Now, gloza);
                        cuentaBanco cuenta = cuentabancoBLL.SelectByID(iddestino);
                        double montoActual1 = cuenta.Monto - monto;
                        cuentabancoBLL.updatemonto(cuenta.Id, montoActual1);
                        limpiarPantalla();
                        if ((MontoPagadoActual + monto) >= compra.Total) {
                            MessageBox.Show(this, "La deuda ha sido cancelada en su totalidad", "REGISTRO PAGO");
                            compraBLL.updateestadocompra(compra.Id,"PAGADO");
                        }
                        MessageBox.Show(this, "Se registro el pago correctamente Nro Pago: " + pk, "REGISTRO PAGO");
                        imprimirComprobante(pk);
                        recargarGrid();
                        return;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(this, "No se registro el pago", "ERROR");
                    }
                }
                try
                {
                    caja caja = cajaBLL.SelectByID(iddestino);
                    double montoActual = caja.Monto - monto;
                    cajaBLL.updatemonto(iddestino, montoActual);
                    int pk = pagoscompraBLL.insertar(idcompra, idvendedor, principal.ObtenerLogueado().Id, tipopago, iddestino, nrorecibo, monto, fecha, DateTime.Now, gloza);
                    if ((MontoPagadoActual + monto) >= compra.Total)
                    {
                        MessageBox.Show(this, "La deuda ha sido cancelada en su totalidad", "REGISTRO PAGO");
                        compraBLL.updateestadocompra(compra.Id, "PAGADO");
                    }
                    MessageBox.Show(this, "Se registro el pago correctamente Nro Pago: " + pk, "REGISTRO PAGO");
                    imprimirComprobante(pk);
                    limpiarPantalla();
                    recargarGrid();
                    return;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "No se registro el pago", "ERROR");
                }
            }
            MessageBox.Show(this, "Selecciones una compra para realizar un pago", "ERROR");
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            recargarGrid();
             }
        private void recargarGrid() {
            DateTime ini = dtcini.Value;
            DateTime fin = dtcfin.Value;
            this.pagoscompra_ListaComprasParaGridPagosTableAdapter.Fill(this.gridPagos.pagoscompra_ListaComprasParaGridPagos, "%" + textBox1.Text + "%", ini, fin);
     
        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.CurrentRow != null)
            {
                int pk = (int)dataGridView1.CurrentRow.Cells[0].Value;
                double deuda = (double)dataGridView1.CurrentRow.Cells[6].Value;
                txtnrotransaccioncompra.Text = pk + "";
                txtmonto.Text = deuda + "";
            }
        }

    }
}

